package org.fanximall.erp.product.domain.repository;

import org.fanximall.erp.common.page.PageResponse;
import org.fanximall.erp.product.domain.aggregate.AttributeAggregateRoot;
import org.fanximall.erp.product.domain.dto.AttributeItemPageQueryDTO;
import org.fanximall.erp.product.domain.model.AttributeItemModel;
import org.fanximall.erp.product.domain.model.AttributeValueModel;

import java.util.List;

/**
 * @author :  william
 * @version :  V1.0  created in 2024/4/23
 * 属性项存储层
 */
public interface AttributeRepository {

    /**
     * 根据属性名称及属性类型获取是否存在
     * @param itemName 属性项名称
     * @param typeCode 属性类型
     * @return
     */
    boolean existAttributeItem(String itemName, String typeCode);

    /**
     * 保存属性项
     * @param attributeItemModel 属性实体
     */
    void saveAttributeItem(AttributeItemModel attributeItemModel);


    /**
     * 更新属性项
     * @param attributeItemModel 属性实体
     */
    void updateAttributeItem(AttributeItemModel attributeItemModel);

    /**
     * @param attributeItemPageQueryDTO 分页查询对象
     * @return
     */
    PageResponse<AttributeItemModel> pageQueryAttributeItem(AttributeItemPageQueryDTO attributeItemPageQueryDTO);

    /**
     * 根据属性项id查询属性信息
     * @param attributeItemId
     * @return
     */
    AttributeAggregateRoot getAttributeByAttributeItemId(Long attributeItemId);


    /**
     * 批量保存属性值
     * @param attributeValues
     */
    void batchSaveAttributeValue(List<AttributeValueModel> attributeValues);


    /**
     * 获取属性项下的属性值
     * @param attributeItemId
     * @return
     */
    List<AttributeValueModel> getAttributeItemValue(Long attributeItemId);


    /**
     * 批量刪除
     * @param ids
     */
    void batchDeleteAttributeValue(List<Long> ids);
}
